import express from 'express'
import { body, query } from 'express-validator'

import validatorMiddleware from '../middleware/validator.js'

import {
  login,
  register,
  getUserInfoV2,
  getUserInfoById,
  getUserInfo,
  createUser,
  getMenuList,
  updateUser,
  getUserList
} from '../controllers/userController/index.js'
import { updateStatus, resetPassword, deleteUserById } from '#src/controllers/userController/index.js'

const router = express.Router()

const createRules = [
  body('name').trim().notEmpty().withMessage('用户名不能为空'),
  body('phone').trim().notEmpty().withMessage('手机号不能为空').isMobilePhone('zh-CN').withMessage('手机号不合法'),
  body('email').trim().optional({ values: 'falsy' }).isEmail().withMessage('邮箱地址不合法'), // 邮箱是可选的
  body('roleIds').optional({ values: 'falsy' }).isArray().withMessage('角色id不合法')
]

const updateRules = createRules.concat([body('userId').notEmpty().withMessage('用户Id不能为空')])

/**
 * 登录
 */
router.post(
  '/login',
  validatorMiddleware([
    body('name').trim().notEmpty().withMessage('用户名不能为空'),
    body('password').trim().notEmpty().withMessage('密码不能为空')
  ]),
  login
)

/**
 * 注册
 */
router.post('/register', register)

/**
 * 获取个人信息-前端未使用
 *
 * 示例： 将token的获取和验证放在 getUserInfo这个 controller里面 ，见下面的优化后的路由-token验证是使用中间件（authMiddleware）实现
 */
router.get('/v2/getUserInfo', getUserInfoV2)

/**
 * 查询用户详情， 包含角色信息
 * 通过中间件-已经解析过token， 这里直接使用
 */
router.get('/login/getUserInfo', getUserInfo)

/**
 * 新增用户
 */
router.post('/create', validatorMiddleware(createRules), createUser)

router.get('/getMenuList', getMenuList)

/**
 * 更新用户信息
 */
router.post('/update', validatorMiddleware(updateRules), updateUser)

/**
 * 用户管理-列表分页查询
 */
router.post('/getUserList', getUserList)

/**
 * 更新状态
 */
router.post(
  '/updateStatus',
  validatorMiddleware([body('userId').notEmpty().withMessage('用户id不能为空')]),
  updateStatus
)

/**
 * 用户管理-重置密码
 */
router.post(
  '/resetPassword',
  validatorMiddleware([body('userId').notEmpty().withMessage('用户id不能为空')]),
  resetPassword
)

/**
 * 用户管理-查询用户详情
 */
router.get(
  '/getUserInfoById',
  validatorMiddleware([query('userId').notEmpty().withMessage('用户id不能为空')]),
  getUserInfoById
)

/**
 * 删除用户
 */
router.delete(
  '/deleteUserById',
  validatorMiddleware([query('userId').notEmpty().withMessage('用户id不能为空')]),
  deleteUserById
)

export default router
